/*
 * 11共用体.c
 *
 *  Created on: 2024年3月16日
 *      Author: HP
 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

// 联合union是一个能在同一个存储空间存储不同类型数据的类型;
// 联合体所占的内存长度等于其最长成员的长度倍数，也有叫做共用体;
// 同一内存段可以用来存放几种不同类型的成员，但每一瞬时只有一种起作用;
// 共用体变量中起作用的成员是最后一次存放的成员，在存入一个新的成员后原有的成员的值会被覆盖;
// 共用体变量的地址和它的各成员的地址都是同一地址。
union Var {
	int a;
	float b;
	double c; // 大小8
	char d;
	short f[6]; // 大小12
};

int main0911(){
	union Var var;
	var.a = 100;
	printf("%d\n", var.a); // 100
	var.b = 3.14;
	// 此时再打印a，就不是100了，只有最后一种起作用
	printf("%d\n", var.a); // 1078523331
	printf("%f\n", var.b); // 3.140000
	// 最大对象的大小的整数倍
	printf("%d\n", sizeof(var)); // 16
	// 共用一块地址
	printf("%p\n", &var.a); // 000000000079FE18
	printf("%p\n", &var.b); // 000000000079FE18
	printf("%p\n", &var.c); // 000000000079FE18
	return 0;
}
